package day_06;

/**
 * @ClassName InsertSort
 * @Description TODO
 * @Author hp
 * @Date 2021/6/8 18:40
 * @Version 1.0
 **/

/*
思路
1.先确定第一个数
2.然后下一个数和上一个数比较，如果比上一个大，就交换位置，如果小就在和更之前的比较
*/
public class InsertSort {
    public static void main(String[] args) {
        /*int[] numbers = new int[]{33,32,5,7,10,65,85};
        //控制循环次数，需要循环
        for (int i = 1; i < numbers.length; i++) {
            //从为排序的数组中取出一个数
            int temp = numbers[i];
            //比较这个数和有序数组的最后一个数那个大
            if(temp<numbers[i-1]){
                //如果小于有序数组的最后一个数，就依次比较找到插入节点
                for (int j = 0;j<i;j++){
                    //如果小于有序数组的数，就将[j,i]位置的数往后移动
                    if (temp<numbers[j]){
                        System.arraycopy(numbers,j,numbers,j+1,i-j);
                        numbers[j]=temp;
                        break;
                    }
                }
            }

        }
        for (int i = 0; i < numbers.length; i++) {
            int number = numbers[i];
            System.out.print(""+number+"\t");
        }*/
        //首先声明或者通过传参获得一个存储数字的数组。
        int[] arr = new int[]{9,3,1,4,2,7,8,6,5};
        //控制循环次数，比较从第一个数
        for (int i = 1; i < arr.length; i++) {
            //从无序数组中获得一个数字
            int temp = arr[i];
            //如果这个数比有序数组的最后一个数字小的话，进行依次比较
            if (temp<arr[i-1]) {
                for (int j = 0;j<i;j++){
                    if(temp<arr[j]){
                        System.arraycopy(arr,j,arr,j+1,i-j);
                        arr[j]=temp;
                        break;
                    }
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            int i1 = arr[i];
            System.out.print(""+i1+"\t");
        }
    }

}
